#ifndef TIPOS_H_
#define TIPOS_H_
#include <iostream>
#include <map>
#include <list>

#define NO_EXISTE_TAG 99999999
#define YA_EXISTE_TAG 99999998
#define DB_FRECUENCIA "./frecuencias.dat"
#define IDX_FRECUENCIA "./indice_frecuencias.idx"
#define DB_TAGS "./tagsdb.dat"
#define DB_DELETED "./deleted.idx"
#define DB_TAG "./tag"
/**
 * Tamaño (neto) en memoria que puede llegar a alcanzar el indice de 
 * borrados en el archivo de frecuencias antes de reorganizar el archivo
 * Default : 5 MB
 */
#define TAMANIO_MEMORIA 5000000

namespace DBFrecuencias{
typedef unsigned int CantidadTags;//tamanio del registro
typedef std::string Palabra;//id de la palabra en el sistema
typedef unsigned int TagId;//id del tag en el sistema
typedef unsigned int Offset;//offset dentro del archivo de frecuencias
typedef unsigned int Frecuencia;//frecuencia de la palabra en el tag
typedef unsigned int CantidadPalabras;//frecuencia de la palabra en el tag
typedef unsigned long int MaxFileSize;//

struct SElemento{
	TagId id;
	Frecuencia frecuencia;
};

struct STag{
	TagId tagId;
	CantidadPalabras numeroPalabras;
	Offset offset;
};

typedef std::map<Palabra,Offset> IndiceArchivo;
typedef std::list<Offset> ListaOffsets;
typedef std::map<CantidadTags,ListaOffsets*> IndiceBorrados;
typedef std::list<Frecuencia> ListaFrecuencias;
typedef std::map<Palabra,Frecuencia> FrecuenciasRegistro;
typedef std::list<TagId> ListaTags;
typedef std::map<std::string,STag> IndiceTag;
typedef std::map<TagId,std::string, std::less<TagId> > AuxIndiceTag;
typedef std::map<TagId,Frecuencia> MapFrecuencias;
typedef std::list<std::string> ListaNombreTags;
}
#endif /*TIPOS_H_*/
